package org.apache.rocketmq.proxy.config;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.apache.commons.lang3.StringUtils;
import org.apache.rocketmq.common.MixAll;


/**
 * @课程描述:从零带你写框架系列中的课程，整个系列包含netty，xxl-job，rocketmq，nacos，sofajraft，spring，springboot，disruptor，编译器，虚拟机等等。
 * @author：陈清风扬，个人微信号：chenqingfengyangjj。
 * @date:2024/12/31
 * @方法描述：配置管理器
 */
public class ConfigurationManager {
    public static final String RMQ_PROXY_HOME = "RMQ_PROXY_HOME";
    //这里得到的就是用户定义在环境变量中的proxy模块的主目录
    //也就是我自己定义的ROCKETMQ_HOME=D:\code\rocketmq\home\config\proxy这个路径
    //这个路径下存放着proxy模块的配置文件
    protected static final String DEFAULT_RMQ_PROXY_HOME = System.getenv(MixAll.ROCKETMQ_HOME_ENV);
    protected static String proxyHome;
    protected static Configuration configuration;

    //初始化环境变量的方法
    public static void initEnv() {
        //从系统中获取proxy模块的主目录，如果用户没有配置
        proxyHome = System.getenv(RMQ_PROXY_HOME);
        if (StringUtils.isEmpty(proxyHome)) {
            //如果为空则设置用户自己配置的路径
            proxyHome = System.getProperty(RMQ_PROXY_HOME, DEFAULT_RMQ_PROXY_HOME);
        }

        if (proxyHome == null) {
            proxyHome = "./";
        }
    }

    //初始化ProxyConfig配置信息的方法
    public static void intConfig() throws Exception {
        configuration = new Configuration();
        //这里虽然初始化的是Configuration类，但是在Configuration类的init方法中会初始化ProxyConfig对象的配置信息
        configuration.init();
    }

    public static String getProxyHome() {
        return proxyHome;
    }


    //得到封装了Proxy模块所有配置信息的ProxyConfig对象
    public static ProxyConfig getProxyConfig() {
        return configuration.getProxyConfig();
    }

    public static String formatProxyConfig() {
        return JSON.toJSONString(ConfigurationManager.getProxyConfig(),
                SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteNullListAsEmpty);
    }
}